package com.xux.dao.support;

import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import java.util.List;

/**
 * MongoDB通用Dao.
 *
 * @author xux
 * @date 2020-10-20
 */
public interface DaoSupport<T> {

    /**
     * 保存一个对象到mongodb.
     *
     * @param entity entity
     * @return entity
     */
    T save(T entity);

    /**
     * 根据id删除对象.
     *
     * @param id id
     */
    void deleteById(Object id);


    /**
     * 通过条件查询实体(集合).
     *
     * @param query 条件对象
     * @return 集合
     */
    List<T> find(Query query);

    /**
     * 通过一定的条件查询一个实体.
     *
     * @param query 条件对象
     * @return 对象
     */
    T findOne(Query query);

    /**
     * 通过条件查询更新数据.
     *
     * @param query  条件对象
     * @param update update
     */
    void update(Query query, Update update);

    /**
     * 通过ID获取记录.
     *
     * @param id id
     * @return 对象
     */
    T findById(Object id);

    /**
     * 求数据总和.
     *
     * @param query 条件对象
     * @return 和
     */
    long count(Query query);

}
